#ifndef PORT_H_
#define PORT_H_

/*头文件*/
#include <stdio.h>						//< 标准输入输出定义
#include <stdlib.h>						//< 标准函数库定义
#include <unistd.h>						//< Unix 标准函数定义
#include <fcntl.h>						//< 文件控制定义
#include <termios.h>					//< POSIX 终端控制定义
#include <errno.h>						//< 错误号定义
#include <string.h>						//< 字符串功能函数
#include <sys/types.h> 
#include <sys/stat.h>  
#include "../../Global_Define.h"
#include "../POSIX_Time/POSIX_Time.h"
#include <sys/ioctl.h>

/*串口清空方式枚举*/
typedef enum {
	CLEAR_IN,
	CLEAR_OUT,
	CLEAR_IN_AND_OUT,
}Port_Clear_Mode_e;


/*函数*/
int Port_Open(const char* Port_Name, bool Is_Block, int Port_Mode, unsigned int Band_Rate, unsigned int Data_Bits, char Check_Bit, char Stop_Bit);		//< 打开串口函数

int Port_Recv(int fd, void* Data, int len, unsigned int wait_ms, bool Is_Block);																	//< 串口接收函数
int Port_Read_Block(int fd, void* Data, int len, unsigned int wait_ms);																									//< 从串口读数据（阻塞）
int Port_Read_UnBlock(int fd, void* Data, int len);																									//< 从串口读数据（非阻塞）

int Port_Send(int fd, void* Data, int len, unsigned int wait_ms, bool Is_Block);																	//< 串口发送函数
int Port_Write_Block(int fd, void* Data, int len, unsigned int wait_ms);																									//< 写数据到串口（阻塞）
int Port_Write_UnBlock(int fd, void* Data, int len);																								//< 写数据到串口（非阻塞）

bool Printf_Repoint();																																//< printf重定向，由控制台重定向至串口
unsigned int BandRate_Trans(int value);																												//< 波特率转化为Linux系统用格式
unsigned int DataBits_Trans(int value);																												//< 数据位转化为Linux系统用格式
bool Clear_Port_Register(int fd, Port_Clear_Mode_e mode);																							//< 清空串口缓存区


#endif
